; (function ($) {
    // 移动端遮罩层内元素滚动,遮罩层窗体不滚动的JS处理  依赖jq
    // container表示委托的浮层容器元素（$包装器jq对象）一般为页面的整个灰色遮罩层div
    // selectorScrollable表示container中可以滚动的元素的选择器，表示真正的滚动的主体 一般为遮罩层内当内容过多时可以滚动的元素，设置overflow:auto;max-height:某个固定值值
    $.smartScroll = function (container, selectorScrollable) {
        // 如果没有滚动容器选择器，或者已经绑定了滚动事件，忽略
        if (!selectorScrollable || container.data('isBindScroll')) {
            return;
        }
        // 是否是搓浏览器
        // 自己在这里添加判断和筛选
        var isSBBrowser;
        var data = {
            posY: 0,
            maxscroll: 0
        };
        // 事件处理
        container.on({
            touchstart: function (event) {
                var events = event.touches[0] || event;
                // 先求得是不是滚动元素或者滚动元素的子元素
                var elTarget = $(event.target);
                if (!elTarget.length) {
                    return;
                }
                var elScroll;
                // 获取标记的滚动元素，自身或子元素皆可
                if (elTarget.is(selectorScrollable)) {
                    elScroll = elTarget;
                } else if ((elScroll = elTarget.parents(selectorScrollable)).length == 0) {
                    elScroll = null;
                }
                if (!elScroll) {
                    return;
                }
                // 当前滚动元素标记
                data.elScroll = elScroll;

                // 垂直位置标记
                data.posY = events.pageY;
                data.scrollY = elScroll.scrollTop();
                // 是否可以滚动 小于0时可以滚动，等于0时不可以滚动
                data.maxscroll = elScroll[0].scrollHeight - elScroll[0].clientHeight;
            },
            touchmove: function (event) {
                // 如果不足于滚动，则禁止触发整个窗体元素的滚动
                if (data.maxscroll == 0 || isSBBrowser) {
                    // 禁止滚动
                    event.preventDefault();
                }
                // 滚动元素
                var elScroll = data.elScroll;
                // 当前的滚动高度
                var scrollTop = elScroll.scrollTop();
                // 现在移动的垂直位置，用来判断是往上移动还是往下
                var events = event.touches[0] || event;
                // 移动距离
                var distanceY = events.pageY - data.posY;
                if (isSBBrowser) {
                    elScroll.scrollTop(data.scrollY - distanceY);
                    elScroll.trigger('scroll');
                    return;
                }
                // 上下边缘检测
                if (distanceY > 0 && scrollTop == 0) {
                    // 往上滑，并且到头
                    // 禁止滚动的默认行为
                    event.preventDefault();
                    return;
                }
                // 下边缘检测
                if (distanceY < 0 && (scrollTop + 1 >= data.maxscroll)) {
                    // 往下滑，并且到头
                    // 禁止滚动的默认行为
                    event.preventDefault();
                    return;
                }
            },
            touchend: function () {
                data.maxscroll = 0;
            }
        });
        // 防止多次重复绑定
        container.data('isBindScroll', true);
    };

})(jquery)
